home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / answrbok / 5_11.lha / 5_11 / 5_10a1.c < prev    next >
C/C++ Source or Header  |  1993-08-08  |  1KB  |  51 lines

  1. * Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
  2. * The C++ Answer Book */
  3. * Tony Hansen */
  4. * All rights reserved. */
  5. * Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
  6. * The C++ Answer Book */
  7. * Tony Hansen */
  8. * All rights reserved. */
  9. / look up a name within a symbol table
  10. include <table.h>
  11. include <string.h>
  12. include <error.h>
  13.  
  14. ame *table::look(char *p, int ins)
  15.  
  16.    // hash the name
  17.    int ii = 0;
  18.    char *pp = p;
  19.    while (*pp)
  20.        ii = (ii << 1) ^ *pp++;
  21.    if (ii < 0)
  22.        ii = -ii;
  23.    ii %= size;
  24.  
  25.    // run down that list, looking for the name
  26.    for (name *n = tbl[ii]; n; n = n->next)
  27.        if (strcmp(p, n->string) == 0)
  28.     return n;
  29.  
  30.    // the name was not found
  31.    switch (ins)
  32.        {
  33. case 0:
  34.            error("name not found");
  35.     return 0;
  36.  
  37.        case 2:
  38.     return 0;
  39.  
  40.        case 1:
  41.     name *nn = new name(p);
  42.     nn->next = tbl[ii];
  43.     tbl[ii] = nn;
  44.     return nn;
  45.  
  46.        default:
  47.     error("unknown ins value for table::look()");
  48.     return 0;
  49. }
  50.  
  51.